#Boa:Dialog:Dialog1

import wx
import consultasBD
import Mensaje
import utiles

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1ACEPTAR, wxID_DIALOG1INUSUARIO, wxID_DIALOG1MSJ, 
 wxID_DIALOG1PASSWORD, wxID_DIALOG1SALIR, wxID_DIALOG1STATICTEXT1, 
 wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, 
] = [wx.NewId() for _init_ctrls in range(10)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(346, 240), size=wx.Size(359, 202),
              style=wx.WANTS_CHARS | wx.THICK_FRAME | wx.STAY_ON_TOP,
              title='Bienvenidos a Sussan Boutique')
        self.SetClientSize(wx.Size(351, 175))
        self.SetWindowVariant(wx.WINDOW_VARIANT_MINI)
        self.SetThemeEnabled(False)

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Usuario:', name='staticText1', parent=self,
              pos=wx.Point(80, 48), size=wx.Size(48, 16), style=0)
        self.staticText1.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL,
              False, 'Tahoma'))

        self.inusuario = wx.TextCtrl(id=wxID_DIALOG1INUSUARIO, name='inusuario',
              parent=self, pos=wx.Point(152, 48), size=wx.Size(100, 21),
              style=0, value='')
        self.inusuario.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL,
              False, 'Tahoma'))
        self.inusuario.Bind(wx.EVT_KILL_FOCUS, self.OnInusuarioKillFocus)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Password', name='staticText2', parent=self,
              pos=wx.Point(80, 72), size=wx.Size(55, 16), style=0)
        self.staticText2.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL,
              False, 'Tahoma'))

        self.password = wx.TextCtrl(id=wxID_DIALOG1PASSWORD, name='password',
              parent=self, pos=wx.Point(152, 72), size=wx.Size(100, 21),
              style=wx.TE_PASSWORD, value='')
        self.password.SetFont(wx.Font(10, wx.SWISS, wx.ITALIC, wx.BOLD, False,
              'Arial'))
        self.password.SetToolTipString('password')
        self.password.SetEditable(True)
        self.password.Enable(True)

        self.aceptar = wx.Button(id=wxID_DIALOG1ACEPTAR, label='Aceptar',
              name='aceptar', parent=self, pos=wx.Point(248, 136),
              size=wx.Size(75, 23), style=0)
        self.aceptar.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
              'Tahoma'))
        self.aceptar.SetThemeEnabled(False)
        self.aceptar.SetToolTipString('aceptar')
        self.aceptar.Bind(wx.EVT_BUTTON, self.OnAceptar, id=wxID_DIALOG1ACEPTAR)

        self.salir = wx.Button(id=wxID_DIALOG1SALIR, label='Salir',
              name='salir', parent=self, pos=wx.Point(16, 136), size=wx.Size(75,
              23), style=0)
        self.salir.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
              'Tahoma'))
        self.salir.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1SALIR)

        self.msj = wx.StaticText(id=wxID_DIALOG1MSJ,
              label='ERROR DE USUARIO O PASSWORD', name='msj', parent=self,
              pos=wx.Point(64, 104), size=wx.Size(215, 16), style=0)
        self.msj.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))
        self.msj.Show(False)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='SUCURSAL', name='staticText3', parent=self,
              pos=wx.Point(64, 16), size=wx.Size(66, 16), style=0)
        self.staticText3.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='nombre', name='staticText4', parent=self, pos=wx.Point(152,
              16), size=wx.Size(49, 16), style=0)
        self.staticText4.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.padre = parent
        codigosucursal,nombresucursal = utiles.datosSucursal()
        nombreamostrar = "("+str(codigosucursal)+") "+nombresucursal
        self.staticText4.SetLabel(nombreamostrar)
        print "Iniciando Login"
        self.loginCorrecto = False
        self.salir = False
        self.loginUser = ""
        self.loginRol = ""
        self.sucursalNro, self.nombreSuc = self.sucursal_activa()

    def sucursal_activa(self):
        sql = "SELECT * FROM sucursales WHERE activa = 1"
        resultados = consultasBD.executaSQL(self,"*","sucursales","activa = 1")
        for r in resultados:
            utiles.logBD("Login.py: _sucursal_activa(): "+str(r[1])+" "+str(r[2]))
            return r[1], r[2]            
        return "",""

    def getLogin(self):
        return self.loginCorrecto

    def getUsuario(self):
        return self.loginUser
    
    def getRol(self):
        return self.loginRol

    def getSalir(self):
        return self.salir

    def OnInusuarioKillFocus(self, event):
        self.msj.Show(False)
    
    def OnSalir(self, event):
        self.loginCorrecto = True
        self.salir = True
        self.Close()

    def actualizaTablaUsuarios(self,user,password):
        #actualiza la tabla usuarios que contiene los usuarios on-line
        condicion = " usuario = '"+user+"' and pass = '"+password+"'"
        tablaSQL = "usuarios"
        camposSQL = "logeado= 1 " 
        consultasBD.executaUpdateSQL(None,tablaSQL,camposSQL,condicion)
        #guarda en logeos
        utiles.logOperaciones("Usuario logeado: "+user)
        # la tabla logeos es solo para auditoria.
        tablaSQL = "logeos"
        camposSQL = "('"+user+"','"+str(self.sucursalNro)+"','1','','')"
        idinsert = consultasBD.executaInsertSQL(self,tablaSQL,camposSQL)

    def OnAceptar(self, event):
        #saco la sucursal donde solo puede entrar
        usuario  = self.inusuario.GetValue()
        password = self.password.GetValue()
        #usuario  = "cajatotal1"
        #password = "caja"

        consultaSQL = "SELECT rol,sucursal FROM usuarios WHERE usuario='"+usuario+"' AND pass='"+password+"'"
        resultado = consultasBD.ordenCrudaDict(consultaSQL)

        if resultado == ():
            #error en el acceso
            utiles.logOperaciones("ERROR: de usuario o password")
            self.msj.Show(True)
            self.msj.SetLabel("ERROR DE USUARIO O PASSWORD")
            self.inusuario.ChangeValue("")
            self.password.ChangeValue("")
            self.inusuario.SetFocus()
            print "Logeo incorrecto: error en nombre usuario o password"
            return
        else:
            if resultado[0]['sucursal'] == self.sucursalNro:
                #entro correctamente
                self.actualizaTablaUsuarios(usuario,password)
                self.loginCorrecto = True
                self.loginUser = usuario
                self.loginRol = resultado[0]['rol']
            else:
                utiles.logOperaciones("Usuario no autorizado para la sucursal: "+usuario)
                self.msj.Show(True)
                self.msj.SetLabel("NO AUTORIZADO PARA SUCURSAL")
                self.inusuario.ChangeValue("")
                self.password.ChangeValue("")
                self.inusuario.SetFocus()
                print "Logeo incorrecto: usuario no habilitado para la sucursal"
                return
        print "Logeo correcto"
        self.Close()
